package net.servir.capacidades.dao.jdbc;

import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import net.servir.capacidades.dao.SistemaAdmDao;
import net.servir.capacidades.model.Actividad;
import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.FuncionLeyenda;
import net.servir.capacidades.model.GenOption;
import net.servir.capacidades.model.PreguntaServicio;
import net.servir.capacidades.model.PreguntaTipo;
import net.servir.capacidades.model.PuestoTipo;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.Enumerados.ProfundidadDatosSistema;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;
import org.springframework.stereotype.Repository;

@Repository
public class JdbcSistemaAdmDao implements SistemaAdmDao {

	private SimpleJdbcTemplate jdbcTemplate;
	private DataSource dataSource;
	
	@Autowired
	private JdbcCapacidadesDAO jdbcCapacidadesDao;
	
	@Autowired
	public JdbcSistemaAdmDao(DataSource dataSource){
		this.jdbcTemplate = new SimpleJdbcTemplate(dataSource);
		this.dataSource = dataSource;
	}

	public List<Sistema> getSistemas() {

		List<Sistema> list = new LinkedList<Sistema>();

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_SISTEMA,DESCRIPCION,ACRONIMO,COD_ETAPA,CON_AMBITOS");
		sql.append(" FROM SISTEMA ORDER BY ID_SISTEMA");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString());
		for(Map<String, Object> rec : collec){
			Sistema obj = new Sistema();
			obj.setId_sistema((Number)rec.get("ID_SISTEMA"));
			obj.setDescripcion((String)rec.get("DESCRIPCION"));
			obj.setAcronimo((String)rec.get("ACRONIMO"));
			obj.setCod_etapa((String)rec.get("COD_ETAPA"));
			obj.setCon_ambitos((String)rec.get("CON_AMBITOS"));

			list.add(obj);
		}
		return list;

	}	
	

	public Sistema getSistema(Number idSistema,ProfundidadDatosSistema profundidad) {

		Sistema obj = null;

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_SISTEMA,DESCRIPCION,ACRONIMO,COD_ETAPA,CON_AMBITOS, PUESTO_TIPO, FUNCIONES, to_char(fec_fin_habilitacion, 'dd/mm/yyyy') as FEC_FIN_HABILITACION, mensaje_bienvenida ");
		sql.append(" FROM SISTEMA WHERE ID_SISTEMA = ? ");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),idSistema);
		for(Map<String, Object> rec : collec){
			obj = new Sistema();
			obj.setId_sistema((Number)rec.get("ID_SISTEMA"));
			obj.setDescripcion((String)rec.get("DESCRIPCION"));
			obj.setAcronimo((String)rec.get("ACRONIMO"));
			obj.setCod_etapa((String)rec.get("COD_ETAPA"));
			obj.setCon_ambitos((String)rec.get("CON_AMBITOS"));
			obj.setPuesto_tipo((String)rec.get("PUESTO_TIPO"));
			obj.setFunciones((String)rec.get("FUNCIONES"));
			obj.setFec_fin_habilitacion((String)rec.get("FEC_FIN_HABILITACION"));
			obj.setMensaje_bienvenida((String)rec.get("MENSAJE_BIENVENIDA"));
			if (profundidad.getCodigo() > 0)
			{
				List<Ambito> ambitos = jdbcCapacidadesDao.ObtenerAmbitosPorSistema(idSistema);
				obj.setAmbitos(ambitos);
				if (profundidad.getCodigo() > 1)
				{
					for (Ambito ambito : ambitos) {
						List<Etapa> etapas = jdbcCapacidadesDao.ObtenerEtapasAmbito(ambito.getId_ambito());
						ambito.setEtapas(etapas);
						if (profundidad.getCodigo() > 2)
						{
							for (Etapa etapa : etapas) {
								for (FuncionLeyenda funcion : etapa.getFunciones()) {
									List<Actividad> actividades = this.getActividadesFuncion(funcion.getId_funcion());
									funcion.setActividades(actividades);
								}																
							}
						}
					}					
				}
			}
		}
		return obj;

	}

	public List<Ambito> getAmbitos() {

		List<Ambito> list = new LinkedList<Ambito>();

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_AMBITO,ID_SISTEMA,DESCRIPCION,ESTADO");
		sql.append(" FROM AMBITO");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString());
		for(Map<String, Object> rec : collec){
			Ambito obj = new Ambito();
			obj.setId_ambito((Number)rec.get("ID_AMBITO"));
			obj.setId_sistema((Number)rec.get("ID_SISTEMA"));
			obj.setDescripcion((String)rec.get("DESCRIPCION"));
			obj.setEstado((String)rec.get("ESTADO"));

			list.add(obj);
		}
		return list;

	}
	
	public List<Actividad> getActividadesFuncion(Number idFuncion) {

		List<Actividad> list = new LinkedList<Actividad>();

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT ID_ACTIVIDAD,ID_FUNCION,DESCRIPCION");
		sql.append(" FROM ACTIVIDAD WHERE ID_FUNCION = ?");

		List<Map<String, Object>> collec = jdbcTemplate.queryForList(sql.toString(),idFuncion);
		for(Map<String, Object> rec : collec){
			Actividad obj = new Actividad();
			obj.setId_actividad((Number)rec.get("ID_ACTIVIDAD"));
			obj.setId_funcion((Number)rec.get("ID_FUNCION"));
			obj.setDescripcion((String)rec.get("DESCRIPCION"));

			list.add(obj);
		}
		return list;

	}	
	
	public Number grabarSistema(Sistema sistema){
		
		StringBuilder sql = new StringBuilder();
		Number idSistema = null;
		if (sistema.getId_sistema() == null)
		{			 
			idSistema =  this.jdbcTemplate.queryForInt("Select nvl(max(id_sistema),0) + 1 from sistema");
			
			//Seteamos el estado como vigente
			sistema.setCod_etapa("PROY");
			
			sql = new StringBuilder();
			sql.append("INSERT INTO SISTEMA (ID_SISTEMA, DESCRIPCION, ACRONIMO, COD_ETAPA, CON_AMBITOS, PUESTO_TIPO, FUNCIONES, fec_fin_habilitacion) ");
			sql.append(" VALUES (?,?,?,?,?,?,?,to_date(? || ' 23:00', 'DD/MM/YYYY HH24:MI'))");			
			
			this.jdbcTemplate.update(sql.toString(),idSistema,sistema.getDescripcion(),sistema.getAcronimo(),sistema.getCod_etapa(),sistema.getCon_ambitos(), 
					sistema.getPuesto_tipo(), sistema.getFunciones(), sistema.getFec_fin_habilitacion());			
		}
		else
		{
			idSistema = sistema.getId_sistema();
			
			sql = new StringBuilder();
			sql.append("UPDATE SISTEMA SET DESCRIPCION =?, ACRONIMO = ?, COD_ETAPA = ?, CON_AMBITOS =?, PUESTO_TIPO =?, FUNCIONES =?, fec_fin_habilitacion = to_date(? || ' 23:00', 'DD/MM/YYYY HH24:MI')");
			sql.append(" WHERE ID_SISTEMA = ?");			
			
			this.jdbcTemplate.update(sql.toString(),sistema.getDescripcion(),sistema.getAcronimo(),sistema.getCod_etapa(),sistema.getCon_ambitos(), 
					sistema.getPuesto_tipo(), sistema.getFunciones(), sistema.getFec_fin_habilitacion(), idSistema);			
			
		}
		return idSistema;
	}	
	
	
	public void grabarSistemaBienvenida(Sistema sistema){ 
		
		StringBuilder sql = new StringBuilder();
		Number idSistema = null;
		idSistema = sistema.getId_sistema();
		sql = new StringBuilder();
		sql.append("UPDATE SISTEMA SET MENSAJE_BIENVENIDA = ? ");
		sql.append(" WHERE ID_SISTEMA = ?");			
		
		this.jdbcTemplate.update(sql.toString(),sistema.getMensaje_bienvenida(),idSistema);			
	}	
	
	public Number grabarAmbito(Ambito ambito)
	{
		StringBuilder sql = new StringBuilder();
		Number idAmbito = null;
		if (ambito.getId_ambito() == null)
		{			 
			idAmbito =  this.jdbcTemplate.queryForInt("Select nvl(max(id_ambito),0) + 1 from ambito");
			
			
			sql = new StringBuilder();
			sql.append("INSERT INTO AMBITO (ID_AMBITO,ID_SISTEMA, DESCRIPCION, ESTADO) ");
			sql.append(" VALUES (?,?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idAmbito,ambito.getId_sistema(), ambito.getDescripcion(),ambito.getEstado());		
			sql = new StringBuilder();
			sql.append(" insert into  CORREO_REGULAR (COD_TIPO, CUERPO, ASUNTO, ID_SISTEMA, ID_AMBITO) (SELECT COD_TIPO, CUERPO, ASUNTO, ");
			sql.append(ambito.getId_sistema());
			sql.append(",");
			sql.append(idAmbito);
			sql.append(" FROM CORREO_REGULAR where id_sistema = 0 and id_ambito = 0 )");
			this.jdbcTemplate.update(sql.toString());		
		}
		else
		{
			idAmbito = ambito.getId_ambito();
			
			sql = new StringBuilder();
			sql.append("UPDATE AMBITO SET DESCRIPCION =? ");
			sql.append(" WHERE ID_AMBITO = ?");			
			
			this.jdbcTemplate.update(sql.toString(),ambito.getDescripcion(),idAmbito);			
			
		}
		return idAmbito;
		
	}
	
	public Number grabarPuestoTipo(PuestoTipo puestoTipo)
	{
		StringBuilder sql = new StringBuilder();
		Number idPuestoTipo = null;
		if (puestoTipo.getId_puesto_tipo() == null)
		{			 
			idPuestoTipo =  this.jdbcTemplate.queryForInt("Select nvl(max(id_puesto_tipo),0) + 1 from puesto_tipo");
			
			
			sql = new StringBuilder();
			sql.append("INSERT INTO PUESTO_TIPO (ID_PUESTO_TIPO, ID_SISTEMA, PUESTO_TIPO, ESTADO, COD_GRUPO, ES_RESPONSABLE, NEMOTECNICO) ");
			sql.append(" VALUES (?,?,?,?,?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idPuestoTipo,puestoTipo.getId_sistema(), puestoTipo.getPuesto_tipo()
					,puestoTipo.getEstado(), puestoTipo.getCod_grupo(), puestoTipo.getEs_responsable(), puestoTipo.getNemotecnico());			
		}
		else
		{
			idPuestoTipo = puestoTipo.getId_puesto_tipo();
			sql = new StringBuilder();
			sql.append("UPDATE PUESTO_TIPO SET PUESTO_TIPO =?, COD_GRUPO = ?, ES_RESPONSABLE = ?, NEMOTECNICO = ? ");
			sql.append(" WHERE ID_PUESTO_TIPO = ?");			
			
			this.jdbcTemplate.update(sql.toString(),puestoTipo.getPuesto_tipo(),puestoTipo.getCod_grupo(), puestoTipo.getEs_responsable(), puestoTipo.getNemotecnico(), idPuestoTipo);			
			
		}
		return idPuestoTipo;
		
	}
	
	public Number grabarPreguntaTipo(PreguntaTipo preguntaTipo)
	{
		StringBuilder sql = new StringBuilder();
		Number idPreguntaTipo = null;
		if (preguntaTipo.getId_pregunta_tipo() == null)
		{			 
			idPreguntaTipo =  this.jdbcTemplate.queryForInt("Select nvl(max(id_pregunta_tipo),0) + 1 from pregunta_tipo");
			
			sql = new StringBuilder();
			sql.append("INSERT INTO PREGUNTA_TIPO (ID_PREGUNTA_TIPO, ID_SISTEMA, PREGUNTA_TIPO) ");
			sql.append(" VALUES (?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idPreguntaTipo, preguntaTipo.getId_sistema(), preguntaTipo.getPregunta_tipo());			
		}
		else
		{
			idPreguntaTipo = preguntaTipo.getId_pregunta_tipo();
			sql = new StringBuilder();
			sql.append("UPDATE PREGUNTA_TIPO SET PREGUNTA_TIPO =?, ID_SISTEMA = ? ");
			sql.append(" WHERE ID_PREGUNTA_TIPO = ?");			
			
			this.jdbcTemplate.update(sql.toString(), preguntaTipo.getPregunta_tipo(),preguntaTipo.getId_sistema(), idPreguntaTipo);			
			
		}
		return idPreguntaTipo;
		
	}
	
	
	public Number grabarPreguntaServicio(PreguntaServicio preguntaServicio)
	{
		StringBuilder sql = new StringBuilder();
		Number idPreguntaServicio = null;
		if (preguntaServicio.getId_pregunta_servicio() == null)
		{			 
			idPreguntaServicio =  this.jdbcTemplate.queryForInt("Select nvl(max(id_pregunta_servicio),0) + 1 from pregunta_servicio");
			
			sql = new StringBuilder();
			sql.append("INSERT INTO PREGUNTA_SERVICIO (ID_PREGUNTA_SERVICIO, ID_SISTEMA, PREGUNTA_SERVICIO) ");
			sql.append(" VALUES (?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idPreguntaServicio, preguntaServicio.getId_sistema(), preguntaServicio.getPregunta_servicio());			
		}
		else
		{
			idPreguntaServicio = preguntaServicio.getId_pregunta_servicio();
			sql = new StringBuilder();
			sql.append("UPDATE PREGUNTA_SERVICIO SET PREGUNTA_SERVICIO =?, ID_SISTEMA = ? ");
			sql.append(" WHERE ID_PREGUNTA_SERVICIO = ?");			
			
			this.jdbcTemplate.update(sql.toString(), preguntaServicio.getPregunta_servicio(),preguntaServicio.getId_sistema(), idPreguntaServicio);			
			
		}
		return idPreguntaServicio;
		
	}
	
	
	
	public Number grabarEtapa(Etapa etapa)
	{
		StringBuilder sql = new StringBuilder();
		Number idEtapa = null;
		if (etapa.getId_etapa()== null)
		{			 
			idEtapa =  this.jdbcTemplate.queryForInt("Select nvl(max(id_etapa),0) + 1 from etapa");
			
			
			sql = new StringBuilder();
			sql.append("INSERT INTO ETAPA (ID_ETAPA,ID_AMBITO, DESCRIPCION) ");
			sql.append(" VALUES (?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idEtapa,etapa.getId_ambito(), etapa.getDescripcion());			
		}
		else
		{
			idEtapa = etapa.getId_etapa();
			
			sql = new StringBuilder();
			sql.append("UPDATE ETAPA SET DESCRIPCION =? ");
			sql.append(" WHERE ID_ETAPA = ?");			
			
			this.jdbcTemplate.update(sql.toString(),etapa.getDescripcion(),idEtapa);			
			
		}
		return idEtapa;		
	}
	public Number grabarFuncion(FuncionLeyenda funcion)
	{
		StringBuilder sql = new StringBuilder();
		Number idFuncion = null;
		if (funcion.getId_funcion()== null)
		{			 
			idFuncion =  this.jdbcTemplate.queryForInt("Select nvl(max(id_funcion),0) + 1 from funcion");
			
			
			sql = new StringBuilder();
			sql.append("INSERT INTO FUNCION (ID_FUNCION,ID_ETAPA, DESCRIPCION,NEMOTECNICO) ");
			sql.append(" VALUES (?,?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idFuncion,funcion.getId_etapa(), funcion.getDescripcion(), funcion.getNemotecnico());			
		}
		else
		{
			idFuncion = funcion.getId_funcion();
			
			sql = new StringBuilder();
			sql.append("UPDATE FUNCION SET DESCRIPCION =?,NEMOTECNICO = ? ");
			sql.append(" WHERE ID_FUNCION = ?");			
			
			this.jdbcTemplate.update(sql.toString(),funcion.getDescripcion(), funcion.getNemotecnico(), idFuncion);			
			
		}
		return idFuncion;		

	}
	public Number grabarActividad(Actividad actividad)
	{
		StringBuilder sql = new StringBuilder();
		Number idActividad = null;
		if (actividad.getId_actividad() == null)
		{			 
			idActividad =  this.jdbcTemplate.queryForInt("Select nvl(max(id_actividad),0) + 1 from actividad");
			
			
			sql = new StringBuilder();
			sql.append("INSERT INTO ACTIVIDAD (ID_ACTIVIDAD,ID_FUNCION, DESCRIPCION) ");
			sql.append(" VALUES (?,?,?)");			
			
			this.jdbcTemplate.update(sql.toString(),idActividad,actividad.getId_funcion(), actividad.getDescripcion());			
		}
		else
		{
			idActividad = actividad.getId_actividad();
			
			sql = new StringBuilder();
			sql.append("UPDATE ACTIVIDAD SET DESCRIPCION =? ");
			sql.append(" WHERE ID_ACTIVIDAD = ?");			
			
			this.jdbcTemplate.update(sql.toString(),actividad.getDescripcion(),idActividad);			
			
		}
		return idActividad;		
		
	}

	
	public String validarEliminarSistema(Number idSistema)
	{
		String mensaje = "";

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(*) ");
		sql.append(" FROM AMBITO WHERE ID_SISTEMA = ? ");

		int nroAmbitos = jdbcTemplate.queryForInt(sql.toString(), idSistema);
		if (nroAmbitos > 0)
			mensaje = "El Sistema tiene ambitos registrados, primero debe eliminar los ambitos";
		
		return mensaje;
		
	}
	public void eliminarSistema(Number idSistema)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM SISTEMA ");
		sql.append(" WHERE ID_SISTEMA = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idSistema);			

	}
	
	public String validarEliminarAmbito(Number idAmbito)
	{
		String mensaje = "";
		int rows = 0;

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(*) ");
		sql.append(" FROM TEST WHERE ID_AMBITO = ? ");

		rows = jdbcTemplate.queryForInt(sql.toString(), idAmbito);
		if (rows > 0)
			mensaje = "El Ambito tiene exámenes registrados, no puede eliminar el ambito";
				
		sql = new StringBuilder();
		sql.append("SELECT count(*) ");
		sql.append(" FROM servicio_civil_ambito WHERE id_ambito = ? ");

		rows = jdbcTemplate.queryForInt(sql.toString(), idAmbito);
		if (rows > 0)
			mensaje = "El Ambito tiene participantes registrados, no puede eliminar el ambito";		
		return mensaje;
		
	}
	
	public String validarEliminarPuestoTipo(Number idPuestoTipo)
	{
		String mensaje = "";
		int rows = 0;

		StringBuilder sql = new StringBuilder();
		sql.append("select count(*) ");
		sql.append(" from servicio_civil sc where sc.id_puesto_tipo = ? ");

		rows = jdbcTemplate.queryForInt(sql.toString(), idPuestoTipo);
		if (rows > 0)
			mensaje = "El tipo de pruesto (perfil) esta asignado a personas censadas dentro del diagnóstico, por tanto no puede ser eliminado";
				
		return mensaje;
	}
	
	public String validarEliminarPreguntaTipo(Number idPreguntaTipo)
	{
		String mensaje = "";
		int rows = 0;

		StringBuilder sql = new StringBuilder();
		sql.append("select count(*) ");
		sql.append(" from pregunta where id_pregunta_tipo = ? ");

		rows = jdbcTemplate.queryForInt(sql.toString(), idPreguntaTipo);
		if (rows > 0)
			mensaje = "Existen preguntas pertenecientes al tipo de pregunta, por tanto no puede ser eliminado";
				
		return mensaje;
	}

	public String validarEliminarPreguntaServicio(Number idPreguntaServicio)
	{
		String mensaje = "";
		int rows = 0;

		StringBuilder sql = new StringBuilder();
		sql.append("select count(*) ");
		sql.append(" from pregunta where id_pregunta_servicio = ? ");

		rows = jdbcTemplate.queryForInt(sql.toString(), idPreguntaServicio);
		if (rows > 0)
			mensaje = "Existen preguntas en el banco relacionadas al tipo de servicio, por tanto no puede ser eliminado";
				
		return mensaje;
	}
	
	public void eliminarAmbito(Number idAmbito)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM AMBITO ");
		sql.append(" WHERE ID_AMBITO = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idAmbito);			

	}

	public void eliminarPuestoTipo(Number idPuestoTipo)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM puesto_tipo ");
		sql.append(" WHERE id_puesto_tipo = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idPuestoTipo);			

	}

	public void eliminarPreguntaTipo(Number idPreguntaTipo)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM pregunta_tipo ");
		sql.append(" WHERE id_pregunta_tipo = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idPreguntaTipo);			

	}
	
	public void eliminarPreguntaServicio(Number idPreguntaServicio)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM pregunta_servicio ");
		sql.append(" WHERE id_pregunta_servicio = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idPreguntaServicio);			

	}
	
	public LinkedList<GenOption> getGrupoPuestoTipos() {
		String sql = "select rtrim(ltrim(codigo)) as codigo, descripcion from codigo where grupo = 'GRPT' order by orden";
		
		List<Map<String, Object>> lSectorMaps = 
			jdbcTemplate.queryForList(sql);
		LinkedList<GenOption> obj = new LinkedList<GenOption>();
		for(Map<String, Object> rec : lSectorMaps){
			GenOption s = new GenOption();
			s.setCodigo((String)rec.get("CODIGO"));
			s.setDescripcion((String)rec.get("DESCRIPCION"));			
			obj.add(s);
		}
		return obj;
	}

	public String validarEliminarActividad(Number idActividad)
	{
		String mensaje = "";

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(distinct id_servicio_civil) ");
		sql.append(" FROM servicio_civil_actividad WHERE id_actividad = ? ");

		int nro = jdbcTemplate.queryForInt(sql.toString(), idActividad);
		if (nro > 0)
			mensaje = String.format("La Actividad ya fue asignado a %d personas, primero debe quitar las funciones de las personas registradas",nro);
		
		return mensaje;
		
	}
	public void eliminarActividad(Number idActividad)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM ACTIVIDAD ");
		sql.append(" WHERE ID_ACTIVIDAD = ?");			
		
		this.jdbcTemplate.update(sql.toString(),idActividad);			

	}

	public String validarEliminarFuncion(Number idFuncion)
	{
		String mensaje = "";

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(distinct sca.id_servicio_civil) ");
		sql.append(" FROM servicio_civil_actividad sca join actividad ac on sca.id_actividad=ac.id_actividad WHERE ac.id_funcion = ? ");

		int nro = jdbcTemplate.queryForInt(sql.toString(), idFuncion);
		if (nro > 0)
			mensaje = String.format("La Función ya fue asignado a %d personas, primero debe quitar las funciones de las personas registradas",nro);
		
		return mensaje;
		
	}
	public void eliminarFuncion(Number idFuncion)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM ACTIVIDAD ");
		sql.append(" WHERE ID_FUNCION = ?");		
		
		this.jdbcTemplate.update(sql.toString(),idFuncion);			

		sql = new StringBuilder();
		sql.append("DELETE FROM FUNCION ");
		sql.append(" WHERE ID_FUNCION = ?");		
		
		this.jdbcTemplate.update(sql.toString(),idFuncion);		
		
	}
	
	public String validarEliminarEtapa(Number idEtapa)
	{
		String mensaje = "";

		StringBuilder sql = new StringBuilder();
		sql.append("SELECT count(distinct sca.id_servicio_civil) ");
		sql.append(" FROM servicio_civil_actividad sca join actividad ac on sca.id_actividad=ac.id_actividad ");
		sql.append(" JOIN funcion fu on ac.id_funcion=fu.id_funcion ");
		sql.append(" WHERE fu.id_etapa = ? ");

		int nro = jdbcTemplate.queryForInt(sql.toString(), idEtapa);
		if (nro > 0)
			mensaje = String.format("La Etapa ya fue asignado a %d personas, primero debe quitar las funciones de las personas registradas",nro);
		
		return mensaje;
		
	}
	public void eliminarEtapa(Number idEtapa)
	{
		StringBuilder sql = new StringBuilder();
		sql.append("DELETE FROM ACTIVIDAD ");
		sql.append(" WHERE ID_FUNCION in (SELECT id_funcion FROM funcion WHERE id_etapa = ?)");		
		
		this.jdbcTemplate.update(sql.toString(),idEtapa);			

		sql = new StringBuilder();
		sql.append("DELETE FROM FUNCION ");
		sql.append(" WHERE ID_ETAPA = ?");		
		
		this.jdbcTemplate.update(sql.toString(),idEtapa);		

		sql = new StringBuilder();
		sql.append("DELETE FROM ETAPA ");
		sql.append(" WHERE ID_ETAPA = ?");		
		
		this.jdbcTemplate.update(sql.toString(),idEtapa);		
	}	
}
